//
//  WBStatusList_ViewModel.swift
//  weibo
//
//  Created by 林帆 on 2017/4/20.
//  Copyright © 2017年 林帆. All rights reserved.
//

import Foundation

// 微博数据列表视图模型
/**
 父类的选择
 
 - 如果类需要使用 ‘kvc’或者字典转模型框架设置对象值，类就需要继承自 NSObject
 - 如果类只是包装一些代码逻辑，可以不用任何父类，好处：更加轻便
 - 提示 ：如果用oc 写 都要继承nsobject
 
 使命: 负责微博的数据处理
 1. 字典转模型
 2. 下拉/ 上拉刷新数据处理
 
 */
fileprivate let maxPullupTryTimes = 3

class WBStatusList_ViewModel {
    lazy var statusList = [WBStatus]()
    
    fileprivate var pullupErrorTime = 0
    
    func loadStatus(pullup : Bool , completion: @escaping (_ isSuccess: Bool,  _ shouldRefresh: Bool ) ->())  {
        
        //判断是否是上拉刷新，同时检查刷新错误
        if pullup && pullupErrorTime > maxPullupTryTimes {
            completion(true, false)
            return
        }
        
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)
        
        WBNetworkManager.shared.statusList(since_id: since_id, max_id:  max_id) { (list, isSuccess) in
//            1. 字典转模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ) as? [WBStatus] else {
                
                completion(isSuccess, false)
                return
            }
           
            print("刷新到\(array.count) 条数据")
            // 2.拼接数据
            //下拉刷新 应该拼接在数组前面
            if pullup {
                //上拉
                self.statusList += array
            } else {
                //下拉
                self.statusList = array + self.statusList
            }
            
            //判断上拉刷新的数据量
            if pullup && array.count == 0 {
                self.pullupErrorTime += 1
                completion(isSuccess, false)
            }
            
            completion(isSuccess, true)
        }
    }
}















